/**
 * \file IPlugin_Win32.h
 * \brief Plugin interface declaration class for Windows platforms
 * \author Edouard ROGE
 * \date 16 March 2013
 */
#ifndef _PLUGININTERFACE_WIN32_
#define _PLUGININTERFACE_WIN32_

#include <string>

namespace Core
{
	namespace Plugin
	{
		/**
		 * \class IPlugin
		 * \brief Base class for every plug-in interface
		 */
		class IPlugin
		{
		public:

			/**
			 * \fn const String & GetName() const = 0;
			 * \return Plug-in name
			 * \brief Get the name of the plug-in
			 */
			virtual const std::string & GetName() const = 0;
		};

	}
}

#define EXPORT_PLUGIN(PluginClass)	extern "C"\
{\
	__declspec(dllexport) Core::Plugin::IPlugin * CreatePlugin() { return new PluginClass(); }\
	__declspec(dllexport) void ReleasePlugin(Core::Plugin::IPlugin * _pPlugin) { delete (PluginClass*)_pPlugin; }\
}

#endif // _PLUGININTERFACE_WIN32_
